home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / xip / iijppp.lzh / src / fsm.h < prev    next >
C/C++ Source or Header  |  1994-09-23  |  3KB  |  114 lines

  1. #ifndef _FSM_H_
  2. #define    _FSM_H_
  3.  
  4. #include "defs.h"
  5. #include <netinet/in.h>
  6. #include "timeout.h"
  7.  
  8. /*
  9.  *  State of machine
  10.  */
  11. #define    ST_INITIAL    0
  12. #define    ST_STARTING    1
  13. #define    ST_CLOSED    2
  14. #define    ST_STOPPED    3
  15. #define    ST_CLOSING    4
  16. #define    ST_STOPPING    5
  17. #define    ST_REQSENT    6
  18. #define    ST_ACKRCVD    7
  19. #define    ST_ACKSENT    8
  20. #define    ST_OPENED    9
  21.  
  22. #define    ST_MAX        10
  23. #define    ST_UNDEF    -1
  24.  
  25. #define    MODE_REQ    0
  26. #define    MODE_NAK    1
  27. #define    MODE_REJ    2
  28.  
  29. #define    OPEN_ACTIVE    0
  30. #define    OPEN_PASSIVE    1
  31.  
  32. struct fsm {
  33.   char      *name;        /* Name of protocol */
  34.   u_short proto;        /* Protocol number */
  35.   u_short max_code;
  36.   int      open_mode;
  37.   int      state;        /* State of the machine */
  38.   int      reqid;        /* Next request id */
  39.   int      restart;        /* Restart counter value */
  40.   int      maxconfig;
  41.  
  42.   int     reqcode;        /* Request code sent */
  43.   struct pppTimer FsmTimer;    /* Restart Timer */
  44.  
  45.   void      (*LayerUp)();
  46.   void      (*LayerDown)();
  47.   void      (*LayerStart)();
  48.   void      (*LayerFinish)();
  49.   void      (*InitRestartCounter)();
  50.   void      (*SendConfigReq)();
  51.   void      (*SendTerminateReq)();
  52.   void      (*SendTerminateAck)();
  53.   void      (*DecodeConfig)();
  54. };
  55.  
  56. struct fsmheader {
  57.   u_char  code;        /* Request code */
  58.   u_char  id;        /* Identification */
  59.   u_short length;    /* Length of packet */
  60. };
  61.  
  62. #define    CODE_CONFIGREQ    1
  63. #define    CODE_CONFIGACK    2
  64. #define    CODE_CONFIGNAK    3
  65. #define    CODE_CONFIGREJ    4
  66. #define    CODE_TERMREQ    5
  67. #define    CODE_TERMACK    6
  68. #define    CODE_CODEREJ    7
  69. #define    CODE_PROTOREJ    8
  70. #define    CODE_ECHOREQ    9        /* Used in LCP */
  71. #define    CODE_ECHOREP    10        /* Used in LCP */
  72. #define    CODE_DISCREQ    11
  73. #define    CODE_IDENT    12        /* Used in LCP Extension */
  74. #define    CODE_TIMEREM    13        /* Used in LCP Extension */
  75. #define    CODE_RESETREQ    14        /* Used in CCP */
  76. #define    CODE_RESETACK    15        /* Used in CCP */
  77.  
  78. struct fsmcodedesc {
  79.   void (*action)();
  80.   char *name;
  81. };
  82.  
  83. struct fsmconfig {
  84.   u_char type;
  85.   u_char length;
  86. };
  87.  
  88. u_char AckBuff[200];
  89. u_char NakBuff[200];
  90. u_char RejBuff[100];
  91. u_char ReqBuff[200];
  92.  
  93. u_char *ackp, *nakp, *rejp;
  94.  
  95. extern char *StateNames[];
  96. extern void FsmInit(struct fsm *);
  97. extern void NewState(struct fsm *, int);
  98. extern void FsmOutput(struct fsm *, u_int, u_int, u_char *, int);
  99. extern void FsmOpen(struct fsm *);
  100. extern void FsmUp(struct fsm *);
  101. extern void FsmDown(struct fsm *);
  102. extern void FsmInput(struct fsm *, struct mbuf *);
  103.  
  104. extern void FsmRecvConfigReq(struct fsm *, struct fsmheader *, struct mbuf *);
  105. extern void FsmRecvConfigAck(struct fsm *, struct fsmheader *, struct mbuf *);
  106. extern void FsmRecvConfigNak(struct fsm *, struct fsmheader *, struct mbuf *);
  107. extern void FsmRecvTermReq(struct fsm *, struct fsmheader *, struct mbuf *);
  108. extern void FsmRecvTermAck(struct fsm *, struct fsmheader *, struct mbuf *);
  109. extern void FsmClose(struct fsm *fp);
  110.  
  111. extern struct fsm LcpFsm, IpcpFsm, CcpFsm;
  112.  
  113. #endif    /* _FSM_H_ */
  114.